// 指数生成函数
// 有 n 种物品，每种物品有 ai 个，问取 m 个物品的排列数
// 测试链接 ：https://acm.hdu.edu.cn/showproblem.php?pid=1521
// 相关帖子 ：https://www.cnblogs.com/dx123/p/16898277.html
// 相关帖子 ：https://oi-wiki.org/math/poly/egf/
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

int n, m;
const int MAXN = 101;
int a[11];
double fac[MAXN];
double C[11], D[22];

// 生成阶乘表
void init()
{
    fac[0] = fac[1] = 1;
    for(int i = 2; i < MAXN; ++i)
    {
        fac[i] = fac[i - 1] * i;
    }
}

double compute()
{
    for(int i = 0; i <= m; ++i) C[i] = D[i] = 0;
    for(int i = 0; i <= a[1]; ++i) C[i] = 1.0 / fac[i];
    for(int i = 2; i <= n; ++i)
    {
        // 计算 x^(j+k) 的系数
        for(int j = 0; j <= m; ++j)
        {
            // i 号物品取出 k 个
            for(int k = 0; k <= a[i]; ++k)
            {
                D[j + k] += C[j] / fac[k];
            }
        }
        // 转存 C，清空 D
        for(int j = 0; j <= m; ++j)
        {
            C[j] = D[j];
            D[j] = 0;
        }
    }
    return C[m] * fac[m];
}

int main()
{
    init();
    while(~scanf("%d%d", &n, &m))
    {
        for(int i = 1; i <= n; ++i)
        {
            scanf("%d", &a[i]); // 每种物品的数量
        }
        printf("%.0lf\n", compute());
    }

    return 0;
}